package br.ucb.musicbay.managedBean;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.ucb.musicbay.usuario.Usuario;
import br.ucb.musicbay.usuario.UsuarioBO;
import br.ucb.musicbay.usuario.UsuarioDataModel;

public class UsuarioManagedBean {
	private Usuario usuario;
	private List<Usuario> usuarios;
	private Usuario [] usuarioSelect;
	private UsuarioDataModel usuarioDataModel;
	
	public UsuarioManagedBean() {
		usuario = new Usuario();
		setUsuarios(new ArrayList<Usuario>());
		usuarioDataModel = new UsuarioDataModel(getUsuarios());
	}
				
	public Usuario[] getUsuarioSelect() {
		return usuarioSelect;
	}

	public void setUsuarioSelect(Usuario[] usuarioSelect) {
		this.usuarioSelect = usuarioSelect;
	}

	public UsuarioDataModel getUsuarioDataModel() {
		return usuarioDataModel;
	}

	public void setUsuarioDataModel(UsuarioDataModel usuarioDataModel) {
		this.usuarioDataModel = usuarioDataModel;
	}

	public List<Usuario> getUsuarios() {
		UsuarioBO usuarioBO = new UsuarioBO();
		setUsuarios(usuarioBO.recoverAll());
		return usuarios;
	}
	
	public List<Usuario> getAdmin() {
		UsuarioBO usuarioBO = new UsuarioBO();
		setUsuarios(usuarioBO.recoverAdmin());
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}	
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public String actionDelete() {
		FacesContext context = FacesContext.getCurrentInstance();
		UsuarioBO usuarioBO = new UsuarioBO();
		
		if (usuarioBO.delete(getUsuarioSelect())) {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Deletion was successful"));
			else
				context.addMessage(null, new FacesMessage("Exclusao realizada com sucesso"));
			usuarioDataModel = new UsuarioDataModel(getUsuarios());
			return "sucesso";
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while deleting"));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao deletar Musica!"));
			return "falha";
		}
	}
	
	public String actionSave(){
		FacesContext context = FacesContext.getCurrentInstance();
		UsuarioBO usuarioBo= new UsuarioBO();
		if(usuarioBo.save(this.usuario)){			
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("User "+ usuario.getLogin()+" registered with success!"));	
			else
				context.addMessage(null, new FacesMessage("Usuario "+ usuario.getLogin()+" cadastrado com sucesso!"));
			return "sucesso";
		}
		else
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while registering user"));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao cadastrar usuario!"));
			return "falha";
		
	}
	
	public String actionUpdate(ActionEvent event) {
		FacesContext context = FacesContext.getCurrentInstance();
			
		UsuarioBO usuarioBo = new UsuarioBO();
		if (usuarioBo.update(getUsuario())) {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("User " + getUsuario().getNome() + " updated with success!"));
			else
				context.addMessage(null, new FacesMessage("Usuario " + getUsuario().getNome() + " atualizado com Sucesso!"));
			return "sucesso";
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while updating user"));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao atualizar Usuario!"));
			return "falha";
		}
	}	
	
	public void adminStatus(ActionEvent event) {
		FacesContext context = FacesContext.getCurrentInstance();
		UsuarioBO usuarioBo = new UsuarioBO();
		Usuario usuario = (Usuario) event.getComponent().getAttributes().get("usuario");
		
		if (usuario.getStatus() == 1) {
			usuario.setStatus(0);
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage(usuario.getNome()+" was inactivated"));				
			else
				context.addMessage(null, new FacesMessage(usuario.getNome()+" foi inativado"));
		} else {
			usuario.setStatus(1);
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage(usuario.getNome()+" was activated"));
			else
				context.addMessage(null, new FacesMessage(usuario.getNome()+" foi ativado"));
		}

		if (usuarioBo.update(usuario)) {
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while activating/deactivating "+usuario.getNome()));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao ativar/desativar " + usuario.getNome()));
		}
	}
}
